home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / dev / asm / Asm_Course2.lha / Teil14.TXT < prev    next >
Text File  |  1992-09-02  |  12KB  |  303 lines

  1.           A S S E M B L E R - K U R S       (c)  Jeff Kandle 1990
  2.  
  3.                                 14.Teil...
  4.  
  5. So, nachdem wir wissen wie man sprites darstellt, wollen wir mal gucken ob
  6. wir sie auch bewegt kriegen. Das listing von letztens ist schon dafuer
  7. ausgelegt. So brauchen wir uns nur um die Routinen zu kuemmern, die die von
  8. uns erstellten Sinusdaten als Koordinaten in die Spritedatenlisten
  9. schreibt.
  10.  
  11. Gleichzeitig werde ich auch noch das mit den Sternen durchgehen, denn es
  12. ist nicht besonders schwer, nur vielleicht ein bisschen viel zu schreiben.
  13.  
  14. Also, was brauchen wir nur noch fuer unseren Sprite Flieger
  15.  
  16. 1.Eine Zeitbedingte endlosschleife, die im VB-Bereich, die neue
  17. Koordinaten in die Spritedatenlisten schreibt.
  18.  
  19. 2.Ein paar vernuenftige Sprites, obwohl ich meine garnicht mal so schlecht
  20. fand. Aber da von euch nur sehr wenige Jeff heissen solltet ihr euch schon
  21. mal drangeben und eigene Sprites zu entwerfen.
  22.  
  23. 3.Und dann brauchen wir nur noch eine Vernuenftige Kurve...Und da liegt
  24. dann auch das problem. Den Sinusmaker den ich benutzt habe, habe ich
  25. geloescht. Ich werde aber mal sehen ob ich ihn nochmals besorgen kann,
  26. werde ihn dann in die Tools oder Downloadbretter in den Jeweiligen Boxen
  27. pumpen. O.K
  28.  
  29. Jut, das waere es, da mit der kurve kriegen wir schon irgendwie hin. Wir
  30. geben irgenwas ein, und dann schauen wir das sich die Sprites einigermassen
  31. sauber bewegen. Also versucht euch mal dran...es duerfte eigentlich kein
  32. Problem mehr fuer euch sein, deshalb werde ich mal dazu kein Listing
  33. schreiben....!
  34.  
  35. Das einzige Problem ist das mit den Sternen....
  36.  
  37. Wie kriegen wir einen ganzen Bildschirm voll Sterne, wenn wir nur acht zur
  38. verfuegung haben, acht Sterne sind nicht gerade viel, deshalb muessen wir
  39. da etwas anderes in augenschein nehmen. Schauen wir uns erstmal die beiden
  40. Kontrollworte am anfang der Datenliste an.
  41.  
  42. z.b  $a080,$a800
  43.  
  44. Da waere zuerst mal die $a0, sie ist die Vertikale position des Sprites. Die
  45. $80 ist die Horizontale Position, und die $a8 sagt aus wo der Sprite auf
  46. dem Bildschirm aufhoert.
  47. Dieses aufhoeren ist auch gleichzeitig die laenge der liste. Die DMA findet
  48. dann am ende der liste zwei Nullen, die ihr sagt das dieses Sprite zuende
  49. ist. Von der DMA wird in diesen Bildschirm aufbau nichts mehr aus dieser
  50. daten liste gelesen. So einfach ist das. Nun wenn wir aber nicht diese
  51. beiden Nullen schreiben liesst die DMA weiter aus dieser Datenliste, sie
  52. will aber nun neue Definitionen haben. Das ist unsere chance eine Neue
  53. Horizontale position einzugeben. Wenn wir also jede Zeile ende der
  54. Datenliste ohne nullen machen koennen wir sehr einfach mit einem Sprite
  55. einen Kompletten Sternen Himmel Zaubern. Wenn wir dann noch eine Kleine
  56. Routine Schreiben die die koordinaten noch unterschiedlich erhoeht, dann
  57. haben wir einen Dreidimensionalen Sternen Hintergrund gebaut.
  58.  
  59. Ist doch eigentlich ganz einfach.
  60. Damit ihr die nicht die Komplette Datenliste erfinden muesst setze ich
  61. einen Sternenlisteneditor ins Tools Brett...Er ist relativ einfach zu
  62. benutzen, und erklaert sich selber.
  63. Ihr muesst dann nur noch die Abgespeicherte Datenliste in den SourceCode
  64. uebernehmen, alles Klor.
  65.  
  66. So dann werde ich mal ein Kleines Listing bauen das eben diese sachen kann.
  67.  
  68. Org $3e000
  69. Load $3e000
  70.  
  71. execbase=       4
  72. openlibrary=    -408
  73. vposr=          $dff004
  74. intena=         $dff09a
  75. intenar=        $dff01c
  76. forbid=         -30-102
  77. permit=         -30-108
  78. cop1lc=         $dff080
  79. ciaapra=        $bfe001
  80. dmacon=         $dff096
  81. spr_anz=        128
  82.  
  83. start:
  84.         move.l  execbase,a6             ; Multitasking aus
  85.         jsr     forbid(a6)
  86.         move.w  #$a000,intena           ; Interrupts sperren
  87.  
  88.         bsr.l   initpointers
  89.         move.l  #copperliste,cop1lc     ; copperliste erstellen
  90.  
  91. wait:   move.l  vposr,d0                ; Rasterpos holen
  92.         and.l   #$1ff00,d0              ; alles unwichtige ausmaskieren
  93.         cmp.l   #$1000,d0               ; Zeile 16 ($10) erreicht ?
  94.         bne.s   wait                    ; noe...
  95.         bsr.l   Move_stars
  96.         btst    #6,ciaapra
  97.         bne.s   wait
  98.  
  99. ende:   move.l  execbase,a6             ; Multitasking an
  100.         jsr     permit(a6)
  101.         lea     gfxname(pc),a1
  102.         jsr     openlibrary(a6)
  103.         move.l  d0,a6
  104.         move.w  #$83e0,dmacon
  105.         move.w  #$C000,intena
  106.         move.l  38(a6),cop1lc
  107.         moveq   #0,d0                   ; Keinen Dos-Returncode
  108.         rts
  109.  
  110. copperliste:
  111.         dc.l    $00e00004
  112.         dc.l    $00e20000
  113.         dc.l    $008e1a64
  114.         dc.l    $009039d1
  115.         dc.l    $00920030
  116.         dc.l    $009400d8
  117. First:
  118.         dc.l    $01200003
  119.         dc.l    $01220000
  120. Second:
  121.         dc.l    $01240004
  122.         dc.l    $01260000
  123. Third:
  124.         dc.l    $01280004
  125.         dc.l    $012a0000
  126. Fourth:
  127.         dc.l    $012c0004
  128.         dc.l    $012e0000
  129. Fifth:
  130.         dc.l    $01300004
  131.         dc.l    $01320000
  132. Sixth:
  133.         dc.l    $01340004
  134.         dc.l    $01360000
  135. Seventh:
  136.         dc.l    $01380004
  137.         dc.l    $013a0000
  138. Last:
  139.         dc.l    $013c0004
  140.         dc.l    $013e0000
  141.  
  142.         dc.l    $01a20888
  143.         dc.l    $01a40ccc
  144.         dc.l    $01a60fff
  145.         dc.l    $01001200
  146.         dc.l    $01800000
  147.         dc.l    $0182000a
  148.         dc.l    $fffffffe
  149.  
  150. gfxname:
  151.         dc.b    "graphics.library",0
  152.  
  153. even
  154.  
  155. sprite1:
  156.         dc.l    $2A8C2B00,$80000000,$2CB02D00,$00008000
  157.         dc.l    $2E352F00,$80008000,$30973100,$80000000
  158.         dc.l    $32003300,$00008000,$34EA3500,$80008000
  159.         dc.l    $36A93700,$80000000,$38CA3900,$00008000
  160.         dc.l    $3ABD3B00,$80008000,$3C5F3D00,$80000000
  161.         dc.l    $3ED43F00,$00008000,$400E4100,$80008000
  162.         dc.l    $42C74300,$80000000,$44594500,$00008000
  163.         dc.l    $46564700,$80008000,$48964900,$80000000
  164.         dc.l    $4AD94B00,$00008000,$4CEF4D00,$80008000
  165.         dc.l    $4E484F00,$80000000,$50855100,$00008000
  166.         dc.l    $525B5300,$80008000,$545C5500,$80000000
  167.         dc.l    $563A5700,$00008000,$580B5900,$80008000
  168.         dc.l    $5A5B5B00,$80000000,$5C495D00,$00008000
  169.         dc.l    $5EE05F00,$80008000,$60746100,$80000000
  170.         dc.l    $62D36300,$00008000,$64D76500,$80008000
  171.         dc.l    $66BB6700,$80000000,$68B46900,$00008000
  172.         dc.l    $6A676B00,$80008000,$6C4B6D00,$80000000
  173.         dc.l    $6E576F00,$00008000,$70327100,$80008000
  174.         dc.l    $72A87300,$80000000,$74447500,$00008000
  175.         dc.l    $760F7700,$80008000,$78917900,$80000000
  176.         dc.l    $7AE07B00,$00008000,$7C847D00,$80008000
  177.         dc.l    $7E047F00,$80000000,$80A28100,$00008000
  178.         dc.l    $82F58300,$80008000,$84FE8500,$80000000
  179.         dc.l    $86FD8700,$00008000,$88EF8900,$80008000
  180.         dc.l    $8ACB8B00,$80000000,$8C998D00,$00008000
  181.         dc.l    $8E708F00,$80008000,$906F9100,$80000000
  182.         dc.l    $927E9300,$00008000,$94449500,$80008000
  183.         dc.l    $965D9700,$80000000,$98A09900,$00008000
  184.         dc.l    $9A539B00,$80008000,$9C459D00,$80000000
  185.         dc.l    $9EAD9F00,$00008000,$A068A100,$80008000
  186.         dc.l    $A257A300,$80000000,$A4ADA500,$00008000
  187.         dc.l    $A673A700,$80008000,$A891A900,$80000000
  188.         dc.l    $AA33AB00,$00008000,$AC9FAD00,$80008000
  189.         dc.l    $AEE9AF00,$80000000,$B0C0B100,$00008000
  190.         dc.l    $B2BDB300,$80008000,$B4A9B500,$80000000
  191.         dc.l    $B6DBB700,$00008000,$B8C3B900,$80008000
  192.         dc.l    $BAA9BB00,$80000000,$BCF8BD00,$00008000
  193.         dc.l    $BEC9BF00,$80008000,$C08AC100,$80000000
  194.         dc.l    $C21FC300,$00008000,$C407C500,$80008000
  195.         dc.l    $C65FC700,$80000000,$C852C900,$00008000
  196.         dc.l    $CA21CB00,$80008000,$CC95CD00,$80000000
  197.         dc.l    $CE7ECF00,$00008000,$D02DD100,$80008000
  198.         dc.l    $D29BD300,$80000000,$D4EBD500,$00008000
  199.         dc.l    $D649D700,$80008000,$D80AD900,$80000000
  200.         dc.l    $DAC4DB00,$00008000,$DCC2DD00,$80008000
  201.         dc.l    $DE33DF00,$80000000,$E0C5E100,$00008000
  202.         dc.l    $E276E300,$80008000,$E4DEE500,$80000000
  203.         dc.l    $E65EE700,$00008000,$E85BE900,$80008000
  204.         dc.l    $EA9EEB00,$80000000,$ECB1ED00,$00008000
  205.         dc.l    $EE6FEF00,$80008000,$F07AF100,$80000000
  206.         dc.l    $F295F300,$00008000,$F43DF500,$80008000
  207.         dc.l    $F676F700,$80000000,$F853F900,$00008000
  208.         dc.l    $FA25FB00,$80008000,$FC6BFD00,$80000000
  209.         dc.l    $FE79FF00,$00008000,$00320106,$80008000
  210.         dc.l    $027E0306,$80000000,$04E70506,$00008000
  211.         dc.l    $06B20706,$80008000,$08D60906,$80000000
  212.         dc.l    $0AB70B06,$00008000,$0CA40D06,$80008000
  213.         dc.l    $0ECA0F06,$80000000,$108B1106,$00008000
  214.         dc.l    $12711306,$80008000,$144A1506,$80000000
  215.         dc.l    $16751706,$00008000,$18AB1906,$80008000
  216.         dc.l    $1A5A1B06,$80000000,$1C4A1D06,$00008000
  217.         dc.l    $1E931F06,$80008000,$205B2106,$80000000
  218.         dc.l    $22322306,$00008000,$24712506,$80008000
  219.         dc.l    $00000000  ; Stars made with the TTST-STAR-ED !
  220.  
  221. initpointers:
  222.         move.l  #sprite1,d0
  223.         move.w  d0,first+6
  224.         rts
  225.  
  226. move_stars:
  227.         lea     sprite1,a0
  228.         move.w  #spr_anz,d7
  229.         moveq   #0,d0
  230. ms_loop:
  231.         addq    #1,d0
  232.         and.b   #$3,d0          ;3 Ebenen
  233.         bne.s   ms_cont
  234.         addq    #1,d0           ;um nulladdition zu verhindern
  235. ms_cont:
  236.         add.b   d0,1(a0)
  237.         addq    #8,a0           ;zum naechsten spr
  238.         dbra    d7,ms_loop
  239.         rts
  240.  
  241. So, das ist es..Die Basis, das erste Sprite Listing ist nicht zu uebersehen,
  242. aber ist klar, das Grundprinzip ist bei allem was die Sprites angeht
  243. gleich, deshalb auch hier das grundschema.
  244.  
  245. Fuer die Move_Stars routine moechte ich hiermit `Amadeus` danken, er hat sie
  246. mir zur verfuegung gestellt.
  247.  
  248. Wichtig ist das ihr im Label `Spr_anz` die anzahl der sprites angebt, da
  249. die Moveroutine sich nach ihr richtet und nicht nach den Endmarkierungen.
  250.  
  251. Falls Muell auf dem Bildschirm erscheint, daa tippt doch im
  252. Seka Kommandomodus `F` fuer Fill, und dann $40000 und $50000, dann fuellt
  253. er den Bereich der angezeigt wird. Den wiegesagt muss ich ja ein Komplettes
  254. Playfield eroeffnen damit man die Sprites sieht.
  255.  
  256. Ein weiteres Schmankerl dieses Listings sehe ich gerade, es sind die
  257. bildschirmmasse fuer das Playfield. Sie entsprechen den Massen eines
  258. DeluxePaint Overscan Bildes..also wer so lieber arbeitet, ich arbeite nur
  259. in dem Modus, der kann das tun, es ist bis auf ganz bestimmte werte, auf
  260. die man aber kommen muss wenn man ein bisschen ueberlegt, fast dasselbe.
  261. Hier nochmal die Werte zum mitschreiben.
  262.  
  263. Diwstrt $1a64
  264. Diwstop $39d1
  265. Ddfstrt $0030
  266. Ddfstop $00d8
  267.  
  268. So, das war eigentlich alles was man zu den Sprites sagen kann, wer alles
  269. verstanden hat wird sicherlich einsehen, das sie sich eigentlich nur fuer
  270. Sterne eignen, deshalb werde ich sie auch nur noch dafuer benutzen. Also
  271. alles Klar.
  272.  
  273. Wenn ihr meint das ich zuviel geschrieben habe fuer eine Sache die so
  274. schlecht zu benutzen ist wie die Sprites, dann will ich euch nur sagen das
  275. es halt auch dazu gehoert. Denn was meint ihr wenn ihr laut wie ein
  276. Rohrspatz irgendwo ueber sprites schimpft, und dann irgendeiner fragt
  277. `Warum sind die denn so scheisse`, dann koennt ihr nicht sagen...Tja, das
  278. hat der Jeff gesagt`, deshalb ist es schon ganz gut wenn ihr ein Bisschen
  279. hintergrundwissen habt.
  280.  
  281. Den Star-ed lege ich gleich in die Bretter, ehrlich.
  282.  
  283. Versucht doch mal alle bisher erklaerten effekte zu kombinieren. Also ein
  284. 32 Farben Logo, das im Wasser bei Nacht im Wasser gespiegelt wird, so
  285. schwer ist es nicht. Wenn man sich ein Bisschen muehe gibt dann, sieht es
  286. schon einigermassen gut aus.
  287.  
  288. Also machen wir fuer heute mal wieder schluss...Ich muss mir noch das
  289. Naechste Thema ausdenken. Ich schaetze aber es wird mal wieder etwas was
  290. nicht direkt mit Assembler zu tun hat...vielleicht `Packen`, und lauffaehig
  291. machen von effekten, ohne den Seka,oder so !
  292. Auf jeden Fall wird es wieder eine Interressante sache. Falls ihr sie noch
  293. nicht habt solltet ihr euch schonmal die Packer besorgen die ich
  294. vorgestellt habe...Ihr solltet euch auch schon mal den Bytekiller genau
  295. angucken, mit dem Arbeiten wir...so tolle Packer wie den Powerpacker
  296. koennen wir leider fuer unsere Zwecke nicht gebrauchen, also falls ihr den
  297. habt...vergesst ihn...er hat mit dem Was wir machen nicht das geringste zu
  298. tun....
  299.  
  300. C.U.
  301.  
  302.                 Jeff Kandle
  303.